﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class HabilidadTecnicaDAO
    {
        //Atributos
        private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private SqlConnection conexion;

        public HabilidadTecnicaDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        //Creando una Habilidad Tecnica
        public HabilidadTecnica CrearHabilidadTecnica(HabilidadTecnica habilidadTecnica)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Habilidad_Tecnica VALUES(" + habilidadTecnica.Id_Habilidad_Tecnica + "," +
                                                                habilidadTecnica.Postulante.Id_Postulante + ",'" +
                                                                habilidadTecnica.Descripcion_Habilidad + "','" +
                                                                habilidadTecnica.Nivel_Dominio + "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerHabilidadTecnica(habilidadTecnica.Id_Habilidad_Tecnica); //TODO: Queda pendiente de devolver objeto creado
        }

        //Obteniendo una Habilidad Tecnica
        public HabilidadTecnica ObtenerHabilidadTecnica(Int32 Id_Habilidad_Tecnica)
        {
            conexion.Open();
            
            String sentencia = "SELECT * FROM Habilidad_Tecnica WHERE Id_Habilidad_Tecnica='" + Id_Habilidad_Tecnica + "'";
            
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            
            HabilidadTecnica habilidadTecnica = new HabilidadTecnica();
            
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                habilidadTecnica.Id_Habilidad_Tecnica = Convert.ToInt32(resultado["Id_Habilidad_Tecnica"]);
                habilidadTecnica.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_postulante"]);
                habilidadTecnica.Descripcion_Habilidad = (String)resultado["Descripcion_Habilidad"];
                habilidadTecnica.Nivel_Dominio = (String)resultado["Nivel_Dominio"];
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                habilidadTecnica = null;
            }
            conexion.Close();
            return habilidadTecnica;
        }

        //Modificando una Habilidad Tecnica
        public HabilidadTecnica ModificarHabilidadTecnica(HabilidadTecnica habilidadTecnica)
        {
            HabilidadTecnica habilidadTecnicaRegistrado = this.ObtenerHabilidadTecnica(habilidadTecnica.Id_Habilidad_Tecnica);
            String sentencia = "UPDATE Habilidad_Tecnica " +
                                "SET " +
                                    //"Id_Postulante=@Id_Postulante, " +
                                    "Descripcion_Habilidad=@Descripcion_Habilidad, " +
                                    "Nivel_Dominio=@Nivel_Dominio, " +
                                    "WHERE " +
                                    "Id_Habilidad_Tecnica=@Id_Habilidad_Tecnica";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter Id_Habilidad_Tecnica = new SqlParameter("@Id_Habilidad_Tecnica", System.Data.SqlDbType.NVarChar);
                Id_Habilidad_Tecnica.Value = habilidadTecnica.Id_Habilidad_Tecnica;
                comando.Parameters.Add(Id_Habilidad_Tecnica);

                /*SqlParameter Id_Postulante = new SqlParameter("@Id_Postulante", System.Data.SqlDbType.NVarChar);
                Id_Postulante.Value = habilidadTecnica.Id_Postulante;
                comando.Parameters.Add(Id_Postulante);*/

                SqlParameter Descripcion_Habilidad = new SqlParameter("@Descripcion_Habilidad", System.Data.SqlDbType.Int);
                Descripcion_Habilidad.Value = habilidadTecnica.Descripcion_Habilidad;
                comando.Parameters.Add(Descripcion_Habilidad);

                SqlParameter Nivel_Dominio = new SqlParameter("@Nivel_Dominio", System.Data.SqlDbType.NVarChar);
                Nivel_Dominio.Value = habilidadTecnica.Nivel_Dominio;
                comando.Parameters.Add(Nivel_Dominio);

                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
            return this.ObtenerHabilidadTecnica(habilidadTecnica.Id_Habilidad_Tecnica);
        }

        //Eliminando una Habilidad Tecnica
        public void EliminarHabilidadTecnica(Int32 Id_Habilidad_Tecnica_A_Eliminar)
        {
            String sentencia = "DELETE FROM Habilidad_Tecnica WHERE Id_Habilidad_Tecnica=@Id_Habilidad_Tecnica_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_Habilidad_Tecnica_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_Habilidad_Tecnica_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }
    }
}